#批量处理，脚本，阻塞列队，一个一个跑以免机器吃不消
#首先在input文件夹里面，创建批处理文件夹，把这批量跑的fasta文件全放进去
#输入 python one_by_one.py <文件夹名>即可
#作者：zhuxf

import os
import sys
import shutil


filePath = sys.argv[1]
#较小的遗传数据库配置 (reduced_dbs) 或完整的遗传数据库配置 (full_dbs)（默认值：' full_dbs '）

def run_af2(filePath):
    filelist_temp = os.listdir("./input/" + filePath)
    filelist = []

    # 把奇怪后缀全部换成.fasta
    for item in filelist_temp:
        filelist.append(item.split(".")[0] + ".fasta")

    # 按照数字排序
    filelist.sort()
    # print(filelist)
    filelist3 = []
    filelist4 = []
    # models = [1, 2, 3, 4, 5]
    # print("预备执行========================alphafold=====================创建文件夹：complex-{output_dir}".format(output_dir=filePath))
    # 创建批处理的输出文件夹
    os.system("mkdir ./output/complex-{output_dir}".format(output_dir=filePath))

    # 删除无用项目文件夹
    filelist_detect = os.listdir("./output/complex-{output_dir}/".format(output_dir=filePath))

    for i in filelist_detect:
        if not os.path.exists("./output/complex-{output_dir}/{output_file}/{output_file}".format(output_dir=filePath,output_file=i)):
            shutil.rmtree("./output/complex-{output_dir}/{output_file}".format(output_dir=filePath, output_file=i))

    filelist2 = os.listdir("./output/complex-{output_dir}/".format(output_dir=filePath))

    for i in filelist2:
        filelist3.append(i + ".fasta")
    # 差集
    for i in filelist:
        if i not in filelist3:
            filelist4.append(i)

    print("开始执行任务列队：======>")
    print(filelist4)

    item = filelist4[-1]
    # print("bash run_alphafold.sh -d ../alphafold_database -o ./output/批处理-{output_dir} -m model_1 -f ./input/{input} -t 2000-01-10".format(output_dir=filePath,input=item))
    # print("bash run_alphafold.sh -d ../alphafold_database -o ./output/批处理-{output_dir} -m model_1 -f ./input/{input} -t 2000-01-10".format(output_dir=filePath,input=item))
    print("开始执行===================alphafold===========================文件名：" + item)
    # 开始跑alphafold
    os.system(
        "bash run_alphafold.sh -d ../alphafold_database -o ./output/complex-{output_dir} -f ./input/{dir}/{input} -t 2021-11-01 -m multimer -l 1 -r false".format(
            output_dir=filePath, dir=filePath, input=item))

    # 修改权限
    os.system("sudo chmod 777 ./output/complex-{output_dir}/{output_file}".format(output_dir=filePath,
                                                                                  output_file=item.split(".")[0]))
    os.system("sudo mkdir ./output/complex-{output_dir}/{output_file}/{output_file}".format(output_dir=filePath,
                                                                                            output_file=item.split(".")[
                                                                                                0]))
    os.system("sudo chmod 777 ./output/complex-{output_dir}/{output_file}/{output_file}".format(output_dir=filePath,
                                                                                                output_file=
                                                                                                item.split(".")[0]))
    os.system(
        "sudo cp ./output/complex-{output_dir}/{output_file}/rank* ./output/complex-{output_dir}/{output_file}/{output_file}".format(
            output_dir=filePath, output_file=item.split(".")[0]))
    # os.system("sudo rm ./output/批处理-{output_dir}/{output_file}/tmp*".format(output_dir=filePath,output_file=item.split(".")[0]))

    # os.system("sudo cp ./output/complex-{output_dir}/{output_file}/rank* ./output/complex-{output_dir}/{output_file}/{output_file}".format(output_dir=filePath,output_file=item.split(".")[0]))
    if len(filelist4[0:-1])>0:
        run_af2(filePath)

run_af2(filePath)










